AWS Systems Manager Session Manager for Shell AccessでMacからLinux EC2インスタンスに端末でアクセスする
ども、大瀧です。
本日AWS Systems Managerの新機能Session Manager for Shell Accessがリリースされ、SSHなしでEC2インスタンスにシェルアクセスできるようになりました。
- SSH不要時代がくるか!?AWS Systems Manager セッションマネージャーがリリースされました! | Developers.IO
- New – AWS Systems Manager Session Manager for Shell Access to EC2 Instances | AWS News Blog
上記ブログではブラウザからアクセスする様子が紹介されているので、本ブログではMacからCLIによるターミナル経由でのアクセス方法をご紹介します。
動作確認環境
- macOS : High Sierra 10.13.6
- EC2(Linux) : amzn2-ami-hvm-2.0.20180810-x86_64-gp2 (東京リージョン ami-08847abae18baa040)
要件
以下のAWSドキュメントに記載があります。
今回手元で試す際には以下のアップデートが必要でした。
- Mac
- AWS CLIのバージョンアップ
- Session Manager Pluginのインストール
- Amazon Linux
- SSM Agentのバージョンアップ
- IAMロールの設定
Macのセットアップ
セッションマネージャーをCLIで利用するためには、AWS CLIバージョン1.16.12以上であることと、セッションマネージャープラグインのインストールが必要です。以下のコマンドを実行します。
$ pip install --upgrade awscli $ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" - o "sessionmanager-bundle.zip" $ unzip sessionmanager-bundle.zip Archive: sessionmanager-bundle.zip creating: sessionmanager-bundle/ creating: sessionmanager-bundle/bin/ inflating: sessionmanager-bundle/LICENSE inflating: sessionmanager-bundle/install inflating: sessionmanager-bundle/seelog.xml.template inflating: sessionmanager-bundle/VERSION inflating: sessionmanager-bundle/bin/session-manager-pluginsuzaku:~ ryuta $ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin Password: Creating install directories: /usr/local/sessionmanagerplugin/bin Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin Installation successful! $
Amazon Linuxのセットアップ
最近のAmazon LinuxにはSSM Agentがプリインストールされていますが、セッションマネージャーに対応するバージョンは2018/09/12現在Amazon Linux 2のyumリポジトリにアップされていませんでした。そのためRPMパッケージをダウンロードしインストールします。
$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm $ sudo systemctl restart amazon-ssm-agent
また、インスタンスからSystem ManagerのAPIにアクセスするためのIAMロールの設定も必要です。今回はAWSが管理するマネージドポリシーAmazonEC2RoleforSSM
をIAMロールに設定し、EC2に設定しました。
動作確認
では、接続してみます。セッションマネージャー経由の接続は、AWS CLIのaws ssm start-session
コマンドを実行します。オプションにはIPアドレスの代わりにEC2のインスタンスIDを指定するのがユニークですね(^^ 可変のパブリックIPアドレスのときにも便利そうです。
$ aws ssm start-session --target i-XXXXXXXXXXXXX Starting session with SessionId: takiponep-XXXXXXXXXXXXX sh-4.2$
接続出来ました!netstat
で通信状況を見てみると。。。
$ netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 172.31.39.199:47750 52.119.222.76:443 ESTABLISHED tcp 0 771 172.31.39.199:40018 52.119.218.91:443 ESTABLISHED tcp 0 0 172.31.39.199:52448 52.119.222.59:443 ESTABLISHED tcp 0 0 172.31.39.199:39852 52.119.218.91:443 ESTABLISHED tcp 0 0 172.31.39.199:34516 54.240.225.173:443 ESTABLISHED
SSHを使っていないことがわかりますね!セッションマネージャーを介してEC2からは外向きの通信のみで完結する仕組みになっているので、内向きセキュリティグループの調整や固定グローバルIPの管理ともおさらば出来そうです!
まとめ
Systems Managerのセッションマネージャーで手元のMacからEC2インスタンスに接続する様子をご紹介しました。いくつかの制約に気を付けつつ、バシバシ活用していきましょう!